<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        #box {
            /*box-sizing: content-box;*/
            box-sizing: border-box;
            border: 20px solid #dddddd;
            width: 300px;
            height: 200px;
            padding: 40px;
            text-align: center;
            /*overflow: scroll;*/
        }
    </style>
</head>
<body>
<div id="box">
    这是一个盒子
</div>
<script>
    const box = document.getElementById('box');
    /**
     * node.clientXXX 相关的值只与本元素大小相关，与其他元素或浏览器窗口无关
     *
     * node.clientWidth（元素内可视区域的大小）： contentWidth(内容区宽度，默认包含滚动条的width在内的) + paddingLeft + paddingRight - 滚动条的width（要减去滚动条的width，意思就是clientWidth 是不包含滚动条的width的）
     * contentWidth(内容区宽度)：不管在content-box还是border-box下都适用，记住是内容区的宽度，因为content-box下的width就是内容区的宽度
     * 同理node.clientHeight 采用同样的方式计算
     *
     * node.clientLeft/Top 是读取元素的左边框或上边框的border-width 不管border-box还是content-box 都是一致的
     */
    // content-box： contentWidth = width => 300 + 40 + 40 - 0 =  380px

    // border-box：
    // contentWidth = width - paddingLeft - paddingRight - borderLeft - borderRight
    // clientWidth = contentWidth + paddingLeft + paddingRight - 滚动条width
    // => width - borderLeft - borderRight - 滚动条width
    // => 300 - 20 - 20 - 0 =  260px
    console.log('clientWidth:', box.clientWidth)
    // content-box：200 + 40 + 40 - 0 =  280px
    // border-box：200 - 20 - 20 - 0 = 160px;
    console.log('clientHeight:', box.clientHeight)
    // = border-left-width => 20px
    console.log('clientLeft:', box.clientLeft)
    // = border-top-width => 20px
    console.log('clientTop:', box.clientTop)

    // 记住 clientWidth/Height 是不包含滚动条的大小的，且只与本元素的width、height、padding、border、overflow 样式有关
    // 没有padding 、border、滚动条时，clientWidth = width  clientHeight = height  clientLeft/Top = 0
</script>
</body>
</html>